package ch13
{
	import flash.display.Sprite;
	import flash.events.Event;

	import utils.Segment;
	import utils.SimpleSlider;

	/**
	 * 双关节的运动
	 * @author sjp
	 *
	 */
	public class TwoSegments extends Sprite
	{
		private var slider0:SimpleSlider;
		private var slider1:SimpleSlider;
		private var segment0:Segment;
		private var segment1:Segment;

		public function TwoSegments()
		{
			init();
		}

		private function init():void
		{
			segment0 = new Segment(100, 20);
			addChild(segment0);
			segment0.x = 100;
			segment0.y = 100;
			segment1 = new Segment(100, 20);
			addChild(segment1);
			segment1.x = segment0.getPin().x;
			segment1.y = segment0.getPin().y;
			slider0 = new SimpleSlider(-90, 90, 0);
			addChild(slider0);
			slider0.x = 320;
			slider0.y = 20;
			slider0.addEventListener(Event.CHANGE, onChange);
			/**
			 * 如果讨论人类的手臂，就不能像这个肘部一样向两个方向弯曲。
			 * 我们只需要改变 slider1 的范围，让最小值等于 -160 让最大值为 0，那么看上去就更加正常了。
			 * */
//			slider1 = new SimpleSlider(-90, 90, 0);
			slider1 = new SimpleSlider(-160, 0, 0);
			;
			addChild(slider1);
			slider1.x = 340;
			slider1.y = 20;
			slider1.addEventListener(Event.CHANGE, onChange);
		}

		private function onChange(event:Event):void
		{
			segment0.rotation = slider0.value;
			/**
			 * 看起来有些奇怪，因为当 segment0 带动 segment1 运动时；
			 * segment0 并没有带动 segment1 旋转。这就像安装了回旋稳定器，将它的方向稳定住了一样。
			 * 我不知道您是怎么样的，反正我的前臂没有装回旋稳定器（尽管可能会很酷），因此，这样的运动看起来不太自然。
			 * 真正的情况应该是，segment1 的旋转应等于 segment0 的 rotation 加上 slider1 的值。
			 * */
			segment1.rotation = segment0.rotation + slider1.value;
//			segment1.rotation = slider1.value;
			segment1.x = segment0.getPin().x;
			segment1.y = segment0.getPin().y;
		}
	}
}